package c15;

import java.util.ArrayList;
import java.util.List;

/**
 * 竞态条件:
 * 期望的结果是1w，但是每次执行结果几乎都不是1w，
 * 这是因为count++这个操作并非原子操作，步骤分为：
 * 1.取当前值
 * 2.当前值加1
 * 3.重新赋值
 * 两个不同的线程可能都取到了相同的当前值，进行了加1的操作
 * 避免这个问题可以使用：
 * 锁
 * 原子变量
 */
public class CounterThread extends Thread {
    private static int counter = 0;

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            counter++;
        }
    }

    public static void main(String[] args) throws InterruptedException {
        List<Thread> list = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            CounterThread c = new CounterThread();
            c.start();
            list.add(c);
        }
        for (Thread t : list) {
            t.join();
        }
        System.out.println(counter);
    }
}
